<?php

namespace App\Rpc;

/**
 * 收银
 */
interface PaymentServiceInterface
{
    /**
     * 发起一次支付宝支付
     * @param string $order_sn 订单号
     * @param int $amount 支付金额：分
     * @param string $subject 支付描述
     * @param string $method 支付方式：web，wap，app，pos，scan，mini
     * @param array $options 可选配置:支付模式，其他额外参数
     * @return mixed 返回调起支付的参数
     */
    public function alipay(string $order_sn,int $amount,string $subject,string $method,array $options = []) :mixed;


    /**
     * 发起一次微信支付
     * @param string $order_sn 订单号
     * @param int $amount 支付金额：分
     * @param string $subject 支付描述
     * @param string $method 支付方式：web，wap，app，pos，scan，mini
     * @param array $options 可选配置:支付模式，其他额外参数
     * @return mixed 返回调起支付的参数
     */
    public function wechat(string $order_sn,int $amount,string $subject,string $method,array $options = []) :mixed;

    /**
     * 发起一次银联支付
     * @param string $order_sn 订单号
     * @param int $amount 支付金额：分
     * @param string $subject 支付描述
     * @param string $method 支付方式：web，wap，app，pos，scan，mini
     * @param array $options 可选配置:支付模式，其他额外参数
     * @return mixed 返回调起支付的参数
     */
    public function unipay(string $order_sn,int $amount,string $subject,string $method,array $options = []) :mixed;

    /**
     * 查询订单的支付结果
     * @param string $order_sn 订单号
     * @return array 支付结果
     */
    public function query(string $order_sn) :array;

    /**
     * 订单退款
     * @param string $order_sn  订单号
     * @param int $amount 退款金额： 分
     * @return bool 是否成功
     */
    public function refund(string $order_sn, int $amount) : bool;
}